/**
 * 会话服务器，保持长连接机制
 * ps：以事件的形式来保持长连接，同一个连接如不关闭，除了第一次会发一个connect，其他只要客户端同一个socket发送心跳
 *     服务器只触发data事件。
 */
var net = require('net');

// 每个客户端socket连上服务器，服务器都会触发一个属于每个客户端自己的connect事件回调闭包
var server = net.createServer(function(connection) {  // connection是一个socket实例
	var address = connection.remoteAddress;
	console.log('server connected：' + address + "：" + new Date().getSeconds());

	// 心跳机制：7分钟未收到心跳促发关闭事件
	connection.setTimeout(420000, function() {
		connection.destroy(); // 关闭此次socket连接，会出发close事件
	});

	console.log(typeof connection); // Object

	// var sock1 = JSON.stringify(connection);
	// console.log(sock1);
	// var sock2 = JSON.parse(sock1);
	// sock2.write("hello..... ");
	// console.log(typeof sock2);


	// data事件，如是传输的字节流，在这里是一节节的不能保证一次就是一组完整数据，先校验数据完整性
	connection.on('data', function(trunk) { // trunk是一个默认长度的Buffer

		// console.log('received data:' + msgpack.unpackWithType(trunk).message == '');
		// console.log('received data, length:' + trunk.length + ': ' + new Date().getMinutes()); // 6
		// hreatRouter(connection);

		console.log("start");

		close(connection); // 阻塞方法

		console.log("message");
		console.log(1111);
		console.log("message");
		console.log(1111);

	});

	connection.on('end', function() { // 客户端socket发送Fin请求关闭
		console.log('socket Fin: ' + address);
	});

	connection.on('error', function(error) {
		console.log(error);
	});

	connection.on('close', function(err) {
		console.log('socket close: ' + address);
	});

});

function close(s) {
	s.destroy();
}

// 启动服务器
server.listen(6868,'0.0.0.0', 1, function() {
	console.log('server bound');
});

